package cn.suchan.jianzhi.q49_character;

/**
 * 知识点：把字符串转换成整数
 * 题目描述
 * 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能，
 * 但是string不符合数字要求时返回0)，要求不能使用字符串转换整数的库函数。
 * 数值为0或者字符串不是一个合法的数值则返回0。
 * <p>
 * 输入描述:
 * 输入一个字符串,包括数字字母符号,可以为空
 * 输出描述:
 * 如果是合法的数值表达则返回该数字，否则返回0
 * 示例1
 * 输入：+2147483647
 * 输出：2147483647
 * 输入：1a33
 * 输出：0
 * </p>
 *
 * @author suchan
 * @date 2019/06/09
 */
public class Solution {
    public int StrToInt(String str) {
        if (str == "0" || str.isEmpty() || str == null || !str.matches("(\\+|\\-)?\\d+")) {
            return 0;
        }
        char[] strChars = str.toCharArray();
        int result = 0;
        // 10的n次方
        // 例如：123 = 1 * 10^2 + 2 * 10^1 + 2 * 10^0；
        int n = 0;
        for (int i = strChars.length - 1; i >= 0; i--) {
            if (strChars[i] == '+') {
                return result;
            }
            if (strChars[i] == '-') {
                return -result;
            }
            result = result + (strChars[i] - '0') * (int) Math.pow(10, n);
            n++;
        }
        return result;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.StrToInt("123"));
    }
}
